package kjh820909.basic;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class J18_JDBCSetup {
	
	// JDBC 접속정보
	private static final String DRV ="oracle.jdbc.OracleDriver";
	private static final String URL ="jdbc:oracle:thin:@//localhost:1521/xe";
	private static final String USR ="scott";
	private static final String PWD ="TIGER";
	
	// SQL문 작성
	private static final String insertSQL =
			"INSERT INTO sungjuk" +
			" (sjno,name,kor,eng,mat) " +
			" VALUES (SJNO.nextval,'혜교',78,45,12) ";
	private static final String selectSQL =
			" select * from sungjuk ";
	
	public static void main(String[] args) {
		// 오라클을 이용한 JDBC 프로그래밍 기초
		// 1. JDBC 드라이버를 메모리에 적재하여
		// 객체로 생성하고 이것을 DriverManager에 등록
		
		// 2. DriverManager의 getConnection 메서드를
		// 이용해서 데이터베이스 연결객체를 생성함
		
		// 3. PreparedStatement로 실행할 SQL문 객체를 생성
		
		// 4. 실행하는 SQL문이 insert, update, delete라면
		//  executeUpdate()를 사용하고
		//  실행결과는 int로 받음
		// 4. 실행하는 SQL문이 select라면
		//  executeQuery()를 사용하고
		//  실행결과는 ResultSet으로 받음
		
		// 5. ResultSet으로 받은 결과 테이블은 
		//	  먼저 rs.next()로 읽어올 레코드(행)를 가리킨 후
		//	 rs.getxxx( 필드번호 ) 또는
		//	 rs.getxxx( 필드이름 ) 으로
		// 	 테이블의 각 필드 값을 처리할 수 있음
		
		// 6. JDBC 작업이 끝나면
		//	  연결중인 데이터베이스 접속을 끊고
		// 	  관련객체 (conn,ps,rs)는
		//	  메모리에서 제거함
		
	Connection conn = null; // 연결객체 생성
	PreparedStatement ps = null;// SQL 객체 생성용  -> 세가지는 기본사항
	ResultSet rs = null; // 실행결과 저장용
		try{
		Class.forName(DRV); // 1.
		conn=DriverManager
			.getConnection(URL, USR, PWD); // 2.
		ps = conn.prepareStatement(insertSQL);
		int cnt = ps.executeUpdate(); // 4.
		System.out.println(cnt + "건의 데이터 입력");
		
		ps.close(); // 또다른 SQL문 작성하기 위해
					// 기존 ps 객체 제거
		ps = conn.prepareStatement(selectSQL);
		rs = ps.executeQuery();
		
		// ResultSet에서 결과를 레코드 단위로 꺼내
		// 차례대로 출력
		while(rs.next()){	// 5.
				// ResultSet에서 읽어올 레코드가 있으면
			System.out.println(rs.getInt(1));
			System.out.println(rs.getString("name"));
		}
	}catch (Exception ex){
		ex.printStackTrace();
	} finally{
		// 6.
		// JDBC 작업이 끝난후 메모리에서 객체 제거
		if(rs != null)
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		if(ps != null)
			try {
				ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		if(conn != null)
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
	}
	}

}
